// 使用 Promise.race 让 请求 Promise 和 超时 Promise 竞争：
// 如果请求先完成，返回请求结果。
// 如果超时先触发，抛出错误。
function fetchWithTimeout(url, options, timeout = 5000) {
    const fetchPromise = fetch(url, options); // 原始请求
    const timeoutPromise = new Promise((_, reject) => {
        setTimeout(() => reject(new Error("Request timeout")), timeout);
    });
    return Promise.race([fetchPromise, timeoutPromise]);
}

// 使用示例
fetchWithTimeout("https://api.example.com/data", {}, 3000)
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error(error.message)); // 超时会进入这里